{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1cf2b95c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "import torch.optim as optim\n",
    "from torchvision import datasets,transforms\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6b547ab8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置批量大小\n",
    "batch_size = 512\n",
    "device = torch.device('cuda')\n",
    "# 创建训练数据加载器\n",
    "trainloader = torch.utils.data.DataLoader(datasets.MNIST( 'data',train=True ,download = True,\n",
    "                                                         transform=transforms.Compose([transforms.ToTensor()])),\n",
    "                                          batch_size=batch_size,shuffle=True)\n",
    "# 创建测试数据加载器\n",
    "testloader = torch.utils.data.DataLoader(datasets .MNIST( 'data' ,train=False ,download=True,\n",
    "                                                         transform=transforms.Compose([transforms. ToTensor()])),\n",
    "                                         batch_size=batch_size,shuffle=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "65690932",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Net(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(Net,self).__init__()\n",
    "        # 定义卷积层\n",
    "        self.conv1 = nn.Conv2d(1,6,kernel_size=5,padding=2)\n",
    "        self.conv2 = nn.Conv2d(6,16,kernel_size=5)\n",
    "        # 定义全连接层\n",
    "        self.fc1 = nn.Linear(5*5*16,120)\n",
    "        self.fc2 = nn.Linear(120,84)\n",
    "        self.clf = nn.Linear(84,10)\n",
    "    def forward(self,x):\n",
    "        # 前向传播过程\n",
    "        x = self.conv1(x)\n",
    "        x = F.sigmoid(x)\n",
    "        x = F.avg_pool2d(x,kernel_size=2,stride=2)\n",
    "        \n",
    "        x = self.conv2(x)\n",
    "        x = F.sigmoid(x)\n",
    "        x = F.avg_pool2d(x,kernel_size=2,stride=2)\n",
    "\n",
    "        x = torch.flatten(x,start_dim=1)\n",
    "\n",
    "        x = self.fc1(x)\n",
    "        x = F.sigmoid(x)\n",
    "\n",
    "        x = self.fc2(x)\n",
    "        x = F.sigmoid(x)\n",
    "        \n",
    "        x= self.clf(x)\n",
    "        return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "ff8118d6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Net(\n",
       "  (conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))\n",
       "  (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))\n",
       "  (fc1): Linear(in_features=400, out_features=120, bias=True)\n",
       "  (fc2): Linear(in_features=120, out_features=84, bias=True)\n",
       "  (clf): Linear(in_features=84, out_features=10, bias=True)\n",
       ")"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = Net().to(device)\n",
    "optimizer = optim.Adam(model.parameters(),lr = 1e-2)\n",
    "model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "11ba05b7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch:0,loss:2.3014， acc:0.1135 \n",
      "epoch:1,loss:2.3008， acc:0.1135 \n",
      "epoch:2,loss:2.1432， acc:0.2449 \n",
      "epoch:3,loss:0.6513， acc:0.7715 \n",
      "epoch:4,loss:0.1865， acc:0.9439 \n",
      "epoch:5,loss:0.1160， acc:0.9652 \n",
      "epoch:6,loss:0.1019， acc:0.9687 \n",
      "epoch:7,loss:0.0990， acc:0.9693 \n",
      "epoch:8,loss:0.0706， acc:0.9779 \n",
      "epoch:9,loss:0.0652， acc:0.9804 \n",
      "epoch:10,loss:0.0622， acc:0.9818 \n",
      "epoch:11,loss:0.0539， acc:0.9846 \n",
      "epoch:12,loss:0.0501， acc:0.9851 \n",
      "epoch:13,loss:0.0567， acc:0.9826 \n",
      "epoch:14,loss:0.0457， acc:0.9857 \n",
      "epoch:15,loss:0.0509， acc:0.9853 \n",
      "epoch:16,loss:0.0451， acc:0.9861 \n",
      "epoch:17,loss:0.0458， acc:0.9864 \n",
      "epoch:18,loss:0.0496， acc:0.9842 \n",
      "epoch:19,loss:0.0476， acc:0.9862 \n",
      "epoch:20,loss:0.0443， acc:0.9875 \n",
      "epoch:21,loss:0.0437， acc:0.9862 \n",
      "epoch:22,loss:0.0476， acc:0.9864 \n",
      "epoch:23,loss:0.0448， acc:0.9863 \n",
      "epoch:24,loss:0.0484， acc:0.9859 \n",
      "epoch:25,loss:0.0383， acc:0.9891 \n",
      "epoch:26,loss:0.0572， acc:0.9829 \n",
      "epoch:27,loss:0.0391， acc:0.9883 \n",
      "epoch:28,loss:0.0459， acc:0.9863 \n",
      "epoch:29,loss:0.0430， acc:0.9884 \n"
     ]
    }
   ],
   "source": [
    "epochs = 30\n",
    "accs,losses = [],[]\n",
    "for epoch in range(epochs):\n",
    "    # 遍历训练集\n",
    "    for batch_idx,(x,y) in enumerate(trainloader):\n",
    "        x,y = x.to(device),y.to(device)\n",
    "        optimizer.zero_grad()\n",
    "        out = model(x)\n",
    "        loss = F.cross_entropy(out,y)\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "    correct = 0\n",
    "    testloss = 0\n",
    "    # 在测试集上进行评估\n",
    "    with torch.no_grad():\n",
    "        for batch_idx,(x,y) in enumerate(testloader):\n",
    "            x,y = x.to(device),y.to(device)\n",
    "            out = model(x)\n",
    "            testloss += F.cross_entropy(out,y).item()\n",
    "            pred = out.max(dim=1,keepdim=True)[1]\n",
    "            correct += pred.eq(y.view_as(pred)).sum( ).item()\n",
    "\n",
    "    acc = correct/ len(testloader.dataset)\n",
    "    testloss = testloss/(batch_idx+1)\n",
    "    accs.append(acc)\n",
    "    losses.append(testloss)\n",
    "    print( 'epoch:{},loss:{:.4f}， acc:{:.4f} '.format(epoch,testloss,acc))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "e2424607",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1000x1000 with 15 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 提取特征图\n",
    "feature1 = model.conv1(x)\n",
    "feature2 = model.conv2(feature1)\n",
    "n = 5\n",
    "img = x.detach().cpu().numpy()[:n]\n",
    "feature_map1 = feature1.detach().cpu().numpy()[:n]\n",
    "feature_map2 = feature2.detach().cpu().numpy()[:n]\n",
    "# 可视化特征图\n",
    "fig, ax = plt.subplots(3, n, figsize=(10,10))\n",
    "for i in range(n):\n",
    "    ax[0,i].imshow(img[i].sum(0), cmap='gray')\n",
    "    ax[1,i].imshow(feature_map1[i].sum(0),cmap='gray')\n",
    "    ax[2,i].imshow(feature_map2[i].sum(0),cmap='gray')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cf2d41c8",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
